package com.mindskip.xzs.domain.enums;
//定义了一个枚举类型 `RoleEnum`，其中包含了学生角色和管理员角色两种角色
//展示角色类型：前端可以通过 `RoleEnum` 枚举值来展示角色类型的名称，比如在用户管理页面或权限设置页面展示用户的角色。
//根据角色执行不同逻辑：前端可以根据角色类型的不同执行不同的逻辑，比如在权限控制时根据用户的角色判断是否有权限进行某些操作。
//根据角色类型获取相应的角色名称：通过 `getRoleName` 方法可以获取角色的名称，以 "ROLE_" 开头，这在权限控制中可能会用到。
//提供角色类型的枚举值：后端可以使用 `RoleEnum` 枚举值来表示用户的角色，比如在用户实体类中定义角色属性使用枚举值。
//根据 code 获取对应的 RoleEnum 枚举值：后端可以通过 `fromCode` 方法根据传入的 code 获取对应的 `RoleEnum` 枚举值。
//角色名称规范化处理：通过 `getRoleName` 方法可以获取角色名称，以 "ROLE_" 开头，这有助于统一角色名称的处理和使用。
import java.util.HashMap;
import java.util.Map;

// 定义一个枚举类型 RoleEnum
public enum RoleEnum {

    // 枚举值 STUDENT，表示学生角色，code 为 1，name 为 "STUDENT"
    STUDENT(1, "STUDENT"),

    // 枚举值 ADMIN，表示管理员角色，code 为 3，name 为 "ADMIN"
    ADMIN(3, "ADMIN");

    // 枚举值的 code 和 name 属性
    int code; // 代码
    String name; // 名称

    // 构造函数，传入 code 和 name 初始化枚举值
    RoleEnum(int code, String name) {
        this.code = code;
        this.name = name;
    }

    // 用于存储 code 和对应枚举值的 Map 对象
    private static final Map<Integer, RoleEnum> keyMap = new HashMap<>();

    // 静态代码块，将枚举值的 code 和枚举值本身存入 Map 中
    static {
        for (RoleEnum item : RoleEnum.values()) {
            keyMap.put(item.getCode(), item);
        }
    }

    // 根据 code 获取对应的 RoleEnum 枚举值
    public static RoleEnum fromCode(Integer code) {
        return keyMap.get(code);
    }

    // 获取枚举值的 code
    public int getCode() {
        return code;
    }

    // 设置枚举值的 code
    public void setCode(int code) {
        this.code = code;
    }

    // 获取枚举值的 name
    public String getName() {
        return name;
    }

    // 设置枚举值的 name
    public void setName(String name) {
        this.name = name;
    }

    // 获取枚举值的角色名称，以 "ROLE_" 开头
    public String getRoleName() {
        return "ROLE_" + name;
    }
}
